前文
正常来说,一个能在ACGO正常刷题的人,肯定都是学过函数的,但如果你是萌新,请一定要看完此文章。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
函数基础
Q:函数是什么东西?
在数学中,函数是指相对于每个x只有一个对应数的y,称y是x的函数。
常见的一次函数:
y=kx+by=kx+b y=kx+b
而计算机中的函数函数是由其演变过来的,数学中的函数有一个函数解析式,而编程中函数的代码同等与函数解析式。
for example:我们要定义一个函数,需要有单独的格式:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
理论上每个所被定义的函数都有返回值,但可能出现无返回值的情况,也就是走一遍流程,比如初始化/赋值。
当我们的函数没有返回值的时候,int那个位置就要使用void:
若非VOID但没有返回值/VOID但使用RETURN(返回),系统会报错。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在上面代码框的那个括号里面要填在本函数要使用到的变量/数组,除非有的变量/数组已经在全局里定义了,并且要在函数上方。
若在int main里面输入变量,会先传到括号里那个变量,再传到函数内的变量使用代码。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
函数的调用和函数真值
在int main里面使用(函数的名字+括号+括号内的变量):
可直接调用函数,使函数运行其代码。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
正常来说,如果我们传了ab两个变量,然后在变量内将ab相加,并将其赋值与c,则c会被赋予a+b,但ab并未真正加起来。也就是说,我们在函数里运行的代码并不会改变参与变量本身的值。
那么如果我们想要改变原值怎么办:只需要在intintint a(inta(inta(int x)x)x)的x前面加个'&':
这样则可以改变他们的真值,是函数造成的效果计入到参与变量里面。
完整代码:A+B problem
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
函数的递归
Q:在任何可运行的地方,比如int main,都可以运行函数,那么你是否想过若在在函数代码里调用函数会怎么样?
A:会不停运行,因为每当你运行到那个代码都会跳入新的函数。
那么如何停止呢?
做题时只有满足某个条件才会选择停止,那么我们在函数内最前的位置(因情况而定)设一个判断,如果满足了这个条件就return,否则计入函数代码继续递归:
f(n)=return;(!0)/f(f(......f(n)))f(n)=return;(!0)/f(f(......f(n))) f(n)=return;(!0)/f(f(......f(n)))
完整代码:【递归】斐波那契数列
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
搜索基础(待更新)